/* Copyright (c) 2004-2024 Peigen.info. All rights reserved. */

package info.peigen.hotpot.component.schedule.facade.command.order;

import cn.hutool.core.date.DateTime;
import info.peigen.hotpot.common.core.enums.YesOrNo;
import info.peigen.hotpot.component.schedule.facade.enums.ScheduleCommunicationMethod;
import info.peigen.hotpot.component.schedule.facade.enums.ScheduleExecuteResultCode;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;
import lombok.experimental.SuperBuilder;

/**
 * <b>(ScheduleJobCreateOrder)</b>
 *
 * @author Peigen
 * @version 1.0.0
 * @since 2023/1/7
 */
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Accessors(chain = true)
public class ScheduleJobCreateOrder extends AbstractScheduleServiceOrder {
    /** 任务名 */
    @NotEmpty
    String                      jobName;
    /** cron 表达式 */
    @NotEmpty
    String                      cron;
    /** 是否可用状态 */
    @Builder.Default
    YesOrNo                     enable = YesOrNo.Y;
    /** 通讯方式 */
    @NotNull
    ScheduleCommunicationMethod communicationMethod;
    /** 如果是Http调用，url配置 */
    String                    url;
    /** 如果是webService调用，endPoint配置 */
    String                    endPoint;
    /** 上次执行时间 */
    DateTime                  preExecuteTime;
    /** 上次执行结果 */
    ScheduleExecuteResultCode preExecuteResultCode;
    /** 下次执行时间 */
    @NotNull
    DateTime nextExecuteTime;
    /** 任务执行超时时间，单位秒 */
    int    executeTimeout;
    /** 失败重试次数 */
    int    executeFailRetryCount;
    String memo;
}